use std::{
	collections::HashSet,
	sync::{Arc, LazyLock},
};

use tokio::sync::Mutex;
use tracing::debug;

static CALLEDS: LazyLock<SaveCalleds> = LazyLock::new(SaveCalleds::new);

///此结构定义一个整个呼叫业务内的所有呼叫。
/// 将存储当前已经存在的所有呼叫
pub struct SaveCalleds {
	inner: Arc<Mutex<HashSet<String>>>,
}

impl SaveCalleds {
	fn new() -> Self {
		SaveCalleds {
			inner: Arc::new(Mutex::new(HashSet::with_capacity(1024))),
		}
	}
	///增加一个号码至当前呼叫列表中。
	///返回值表示是否已经存在此号码。
	/// 如果已经存在则返回true.代表此号码已经在队列当中了
	pub async fn add_called(called: &str) -> bool {
		let mut c = CALLEDS.inner.lock().await;

		debug!("呼叫列表增加:{}", called);
		!(*c).insert(called.to_owned())
	}

	///从当前呼叫列表中移除一个号码。
	///返回值表示是否真实移除了此号码。
	pub async fn remove_called(called: &str) -> bool {
		let mut c = CALLEDS.inner.lock().await;

		debug!("全局呼叫列表移除:{}", &called);
		(*c).remove(called)
	}
}
